#if !defined(AFX_COLOURPICKER_H__D0B75901_9830_11D1_9C0F_00A0243D1382__INCLUDED_)
#define AFX_COLOURPICKER_H__D0B75901_9830_11D1_9C0F_00A0243D1382__INCLUDED_

#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000

// ColourPicker.h : header file
//
// Written by Chris Maunder (Chris.Maunder@cbr.clw.csiro.au)
// Extended by Alexander Bischofberger (bischofb@informatik.tu-muenchen.de)
// Copyright (c) 1998.
//
// This code may be used in compiled form in any way you desire. This
// file may be redistributed unmodified by any means PROVIDING it is 
// not sold for profit without the authors written consent, and 
// providing that this notice and the authors name is included. If 
// the source code in  this file is used in any commercial application 
// then a simple email would be nice.
//
// This file is provided "as is" with no expressed or implied warranty.
// The author accepts no liability if it causes any damage whatsoever.
// It's free - so you get what you pay for.

#include "ColorPopup.h"

/////////////////////////////////////////////////////////////////////////////
// CInPlaceColorPickerButton window

void AFXAPI DDX_ColourPicker(CDataExchange *pDX, int nIDC, COLORREF& crColour);

/////////////////////////////////////////////////////////////////////////////
// CInPlaceColorPickerButton window

#define CP_MODE_TEXT 1  // edit text colour
#define CP_MODE_BK   2  // edit background colour (default)

class AFX_EXT_CLASS CInPlaceColorPickerButton : public CButton
{
	DECLARE_DYNCREATE(CInPlaceColorPickerButton);
	// Construction
public:
	CInPlaceColorPickerButton();
	CInPlaceColorPickerButton(CWnd* pParent, CRect& rect, DWORD dwStyle, UINT nID,
		int nRow, int nColumn, CString sInitText, UINT nFirstChar);
	
	// Attributes
public:
	void     SetBkColour(COLORREF crColourBk);
	COLORREF GetBkColour()          { return m_crColourBk; }
	
	void     SetTextColour(COLORREF crColourText);
	COLORREF GetTextColour()        { return m_crColourText;}
	
	void     SetTrackSelection(BOOL bTracking = TRUE)  { m_bTrackSelection = bTracking; }
	BOOL     GetTrackSelection()                       { return m_bTrackSelection; }
	
	void     SetSelectionMode(UINT nMode) { m_nSelectionMode = nMode; }
	UINT     GetSelectionMode()     { return m_nSelectionMode; };
	
	COLORREF GetColour()            { return (m_nSelectionMode == CP_MODE_TEXT)? 
		GetTextColour(): GetBkColour(); }
	void     SetColour(COLORREF crColour) 
	{ (m_nSelectionMode == CP_MODE_TEXT)? 
	SetTextColour(crColour): SetBkColour(crColour); }
	// Operations
public:
     void EndEdit();		
	// Overrides
	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CInPlaceColorPickerButton)
public:
	virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
protected:
	virtual void PreSubclassWindow();
	//}}AFX_VIRTUAL
	
	// Implementation
public:
	virtual ~CInPlaceColorPickerButton();
	
protected:
	void SetWindowSize();


	// protected attributes
protected:
	BOOL     m_bActive,                // Is the dropdown active?
		m_bTrackSelection;        // track colour changes?
	COLORREF m_crColourBk;
	COLORREF m_crColourText;
	UINT     m_nSelectionMode;
	CRect    m_ArrowRect;
	
	CString  m_sInitText;

	// Generated message map functions
protected:
	//{{AFX_MSG(CInPlaceColorPickerButton)
	afx_msg BOOL OnClicked();
	afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
	//}}AFX_MSG
	afx_msg LONG OnSelEndOK(UINT lParam, LONG wParam);
	afx_msg LONG OnSelEndCancel(UINT lParam, LONG wParam);
	afx_msg LONG OnSelChange(UINT lParam, LONG wParam);
	
	DECLARE_MESSAGE_MAP()
};

/////////////////////////////////////////////////////////////////////////////

//{{AFX_INSERT_LOCATION}}
// Microsoft Developer Studio will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_COLOURPICKER_H__D0B75901_9830_11D1_9C0F_00A0243D1382__INCLUDED_)
